// Copyright (c) 2012 Ecma International.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
es5id: 7.6.1-1-2
description: >
    Allow reserved words as property names at object initialization.
---*/

function Test() {
    var tokenCodes = {
        await: 'await',
        break: 'break',
        case: 'case',
        catch: 'catch',
        class: 'class',
        const: 'const',
        continue: 'continue',
        debugger: 'debugger',
        default: 'default',
        delete: 'delete',
        do: 'do',
        else: 'else',
        export: 'export',
        extends: 'extends',
        finally: 'finally',
        for: 'for',
        function: 'function',
        if: 'if',
        import: 'import',
        in: 'in',
        instanceof: 'instanceof',
        new: 'new',
        return: 'return',
        super: 'super',
        switch: 'switch',
        this: 'this',
        throw: 'throw',
        try: 'try',
        typeof: 'typeof',
        var: 'var',
        void: 'void',
        while: 'while',
        with: 'with',
        yield: 'yield',

        enum: 'enum',

        implements: 'implements',
        interface: 'interface',
        package: 'package',
        protected: 'protected',
        private: 'private',
        public: 'public',

        let: 'let',
        static: 'static',
    };

    var arr = [
        'await',
        'break',
        'case',
        'catch',
        'class',
        'const',
        'continue',
        'debugger',
        'default',
        'delete',
        'do',
        'else',
        'export',
        'extends',
        'finally',
        'for',
        'function',
        'if',
        'import',
        'in',
        'instanceof',
        'new',
        'return',
        'super',
        'switch',
        'this',
        'throw',
        'try',
        'typeof',
        'var',
        'void',
        'while',
        'with',
        'yield',

        'enum',

        'implements',
        'interface',
        'package',
        'protected',
        'private',
        'public',

        'let',
        'static',
    ];

    for (var i = 0; i < arr.length; ++i) {
        var propertyName = arr[i];

        assert(tokenCodes.hasOwnProperty(propertyName),
               'Property "' + propertyName + '" found');

        assert.sameValue(tokenCodes[propertyName], propertyName,
                         'Property "' + propertyName + '" has correct value');
    }
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
